Linux实操篇
1.1 Linux磁盘分区、挂载
1.1.1 Linux分区
原理介绍
- Linux来说无论有几个分区,分给哪一目录使用,它归根结底只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
- Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得
硬盘说明
- Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
- 对于IDE硬盘,驱动器标识符为"
hdx\~",“hd”表明分区所在设备的类型,这里指IDE硬盘。“x”代表盘号(a为基本盘,b为从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,他们是主分区或者扩展分区,从5开始是逻辑分区。 - 对于SCSI硬盘,则标识为“
sdx\~”,SCSI硬盘“sd”来表示分区所在设备的类型的,其余和IDE硬盘的表示方法一样。
相关指令
- 查看所有设备挂载情况
- 命令:
lsblk或者lsblk -f
- 命令:
- 查看所有设备挂载情况
挂载的经典案例(增加一块硬盘)
- 如何增加一块硬盘
虚拟机添加硬盘
在vmware右击该虚拟机,设置,添加新硬盘即可
分区
分区命令为
fdisk /dev/所操作的硬盘,注意w保存修改后退出格式化
建立文件系统。
格式化命令为
mkfs [选项] [-t 文件系统类型] 设备文件名(make file system),常用命令实例:- 格式化为 EXT4(最通用,在一开始就分配好固定数量的i节点):
mkfs.ext4 /dev/sdb1 - 格式化为 XFS (高性能服务器常用,基于B+树动态创建管理i节点):
mkfs.xfs /dev/sdb1 - 格式化为 FAT32 (用于U盘,跨平台兼容):
mkfs.vfat /dev/sdb1
- 格式化为 EXT4(最通用,在一开始就分配好固定数量的i节点):
挂载
用户可以直接读写该硬盘。
命令:
mount 硬盘文件 目录,如将sdb1硬盘挂载到/newdisk/目录下,mount /dev/sdb1 /newdisk/卸载命令为:
umount 硬盘文件或umount 目录注意:使用命令行挂载后,重启会失效
设置可以自动挂载
修改 /etc/fstab 文件即可完成该操作
vim /etc/fstab
仿照前三个分区,将新分区挂载到指定目录即可,分区推荐使用标识符UUID(
blkid /dev/sdb1获取硬盘UUID)修改完成后,使用
mount -a,测试一下是否挂载成功
- 如何增加一块硬盘
1.1.2 磁盘使用情况查询
- 查询整体磁盘使用情况
- 基本语法:
df -h(disk free)
- 基本语法:

查询指定目录的磁盘占用情况
- 基本语法:
du -h 目录(disk usage),若没有指明目录,默认查询当目录 - 选项:
-s:指定目录占用大小汇总-h:带计量单位-a:将目录下的文件也列出来--max-depth=1:子目录深度-c:列出明细的同时,增加汇总值

- 基本语法:
1.1.3 工作使用指令
统计指定目录下文件的个数
ll /opt | grep "^-" | wc -l,wc -l(word count)命令用来统计文本中换行符的个数,即行数。统计指定目录下目录的个数
ll /opt | grep "^d" | wc -l统计指定目录下文件的个数,包括子文件夹的
ll -R /opt | grep "^-" | wc -l统计指定目录下目录的个数,包括子文件夹的
ll -R /opt | grep "^d" | wc -l以树状显示目录结构
tree
1.2 网络配置
1.2.1 NAT网络配置原理图

1.2.2 网络配置指令
查看ip地址:
ifconfig / ip addrping测试主机之间的连通性
- 基本语法:
ping 目的主机ip
- 基本语法:
Linux网络环境设置
DHCP协议自动获取IP(默认),IP不会冲突,但是IP不固定,不适合做服务器
指定IP,使用静态IP,通过修改配置文件的方法,自己指定IP
配置静态IP
- 到
/etc/sysconfig/network-scripts/,修改ifcfg-ens33[具体文件看自己的虚拟网卡是哪个]该文件
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="cc535551-4caa-4bef-9498-6f138559d326" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.134.128 NETMASK=255.255.255.0 GATEWAY=192.168.134.2 DNS1=114.114.114.114 DNS2=8.8.8.8将BOOTPROTO[引导协议]值设置为 static ,添加手动配置的IPADDR[静态IP地址]、NETMASK[子网掩码]、GATEWAY[网关]、DNS服务器等配置
重启网络服务:
sudo systemctl restart network查看IP地址是否正确
ip addr测试DNS服务是否正常
ping www.baidu.com测试网关
ping 192.168.134.2
- 到
设置主机名和hosts映射
指令
hostname,查看主机名修改主机名
- 在
/etc/hostname指定
- 在
设置hosts映射,使得主机可以通过主机名与其他主机通信
windows系统设置hosts映射关系:修改
C:\Windows\System32\drivers\etc\hosts文件即可,加上ip及对应的主机名
Linux系统设置hosts映射关系:在
/etc/hosts文件中指定
主机名解析过程分析(Hosts、DNS)
Hosts是什么?
一个文本文件,用来记录 IP 和 主机名的映射关系
DNS(Domain Name System的缩写),域名系统,是互联网上作为域名和IP地址相互映射的一个分布式数据库。
当对某一个域名发起请求时,计算机首先在浏览器缓存中寻找该域名对应的IP地址,如果没有,就在操作系统DNS缓存中寻找,再没有,会查看本机的hosts文件,寻找该域名的IP映射,最后再没有就会去DNS服务器中寻找。
1.2.3 curl指令(Client URL)
curl (Client URL) 是一个利用 URL 语法在命令行下工作的文件传输工具。
一、 基础探测与查看
用于测试网络连通性和查看服务器响应。
| 功能 | 命令示例 | 说明 |
|---|---|---|
| 获取源码 | curl https://example.com | 将网页 HTML 内容打印在终端 |
| 仅看响应头 | curl -I https://example.com | 常用。查看状态码(200/404)、Server类型、缓存策略等 |
| 详细模式 | curl -v https://example.com | 调试必备。显示请求(>)和响应(<)的完整过程 |
| 探测端口 | curl -v telnet://1.1.1.1:22 | 测试远程服务器特定端口是否开放 |
二、 文件下载
比 wget 更灵活,支持多种下载策略。
保存为指定文件名 (
-o小写):curl -o filename.zip https://example.com/file.zip使用原始文件名 (
-O大写):curl -O https://example.com/image.png断点续传 (
-C -):curl -C - -O https://example.com/bigfile.iso限速下载:
curl --limit-rate 200k -O https://example.com/file.zip
三、 API 调用与数据提交
开发和运维调试接口的核心用法。
发送 POST 请求 (
-d):curl -d "user=ethan&pass=123" https://example.com/login发送 JSON 数据 (
-H指定 Header):curl -X POST -H "Content-Type: application/json" -d '{"id": 101}' https://api.com/user指定请求方法:
curl -X DELETE https://api.com/user/1上传文件:
curl -F "file=@/path/to/img.jpg" https://example.com/upload
四、 常用高级参数速查表
| 参数 | 全称 | 作用 | 场景建议 |
|---|---|---|---|
-L | --location | 跟随重定向 | 网页有跳转时必加,否则只看得到 301/302 页面 |
-k | --insecure | 忽略 SSL 证书检查 | 访问证书过期的网站或内网自签证书时使用 |
-A | --user-agent | 伪装浏览器 | 绕过某些针对爬虫的拦截,如 curl -A "Mozilla/5.0" ... |
-H | --header | 自定义请求头 | 传递 Token、Cookie 等认证信息 |
-x | --proxy | 使用代理 | curl -x http://proxy.com:8080 https://google.com |
-s | --silent | 静默模式 | 不显示下载进度条,常用于脚本处理 |
五、 实用小技巧
一行代码查公网 IP:
curl ifconfig.me或curl cip.cc测试网页响应时间:
curl -o /dev/null -s -w %{time_total}\\n https://www.google.com保存并使用 Cookie:
curl -c cookie.txt https://example.com(保存)curl -b cookie.txt https://example.com(使用)
💡 提示:在 Windows 10/11 和 macOS 中,curl 已经是内置指令,用法与 Linux 完全一致。
1.2.4 wget网络下载工具
wget(World Wide Web get)是一个非交互式的网络下载工具,它最强悍的地方在于极高的稳定性和强大的递归下载(爬取)能力。
一、 wget 的功能
- 后台静默执行:你开启下载后可以退出登录,它会在后台默默把活干完。
- 断点续传:如果下载 10GB 的文件到 9GB 时断网了,
wget可以接着下,而不是从头开始。 - 递归下载:它可以像爬虫一样,把整个网站的图片或文档全部抓取下来。
- 极其稳定:在网络极其不稳定的环境下,它的重试机制非常顽强。
二、 常用命令
- 基础下载(直接存到当前目录)
wget https://example.com/jdk-11.tar.gz- 下载并重命名 (
-O大写)
wget -O myjava.tar.gz https://example.com/jdk-11.tar.gz- 断点续传 (
-c)
这是运维最常用的参数。如果下载中断了,加上 -c 接着下:
wget -c https://example.com/very-big-file.zip- 后台下载 (
-b)
下载大文件时,不想让窗口被占死:
wget -b https://example.com/database-backup.sql
# 系统会返回一个 PID,并在当前目录生成 wget-log 日志- 限制下载速度 (
--limit-rate)
为了不把公司带宽占满,可以限速:
wget --limit-rate=500k https://example.com/file.zip三、 高级玩法:镜像一个网站 (-r)
假设你想把某个在线文档全部下载到本地离线查看:
Bash
wget -r -p -np -k https://docs.example.com-r: 递归下载。-p: 下载网页运行所需的所有资源(图片、样式表等)。-np: 不追溯到父目录(只下载当前路径下的内容)。-k: 将下载后的链接转换为本地链接(方便离线点击)。
四、 wget vs curl 该选谁?
虽然两者都能下载,但侧重点不同:
| 特性 | wget | curl |
|---|---|---|
| 主要定位 | 下载器(专门搬运文件) | 传输工具(与服务器交互) |
| 递归下载 | 支持(可以爬整个网站) | 不支持 |
| 交互能力 | 较弱 | 极强(模拟表单、API调用) |
| 断点续传 | 原生支持极好 | 需要配合参数 -C - |
| 安装情况 | 多数 Linux 默认自带 | 现代系统默认自带,功能更广 |
总结建议
- 如果你只是想下载一个超大的安装包、备份文件,或者想离线保存某个网页,选
wget。 - 如果你是想测试接口、查看 HTTP 头、模拟登录,选
curl。
1.3 进程管理
1.3.1 进程基本介绍
- 在Linux中,每个执行的程序都称为一个进程。每个进程都分配一个ID号(PID,进程号)
- 每个进程都可能以两种方式存在的,前台进程和后台进程,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是系统在后台操作,后台方式执行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
1.3.2 显示系统执行的进程
基本介绍:ps命令(process status)是用来查看目前系统中,有哪些进程正在执行,以及它们执行的状况,可以不加任何参数
基本语法:
ps [选项]常用选项:
-a: 显示当前终端所有进程信息,侧重"人"启动的进程-u: 以用户的格式显示进程信息-x: 显示后台进程运行的参数-e: 显示所有进程,包含“系统”启动的进程-f: 全格式显示,包含UID、PPID等详细信息
注:平时使用ps命令时有两种风格,当需要看进程的父进程(PPID)时,使用
ps -ef,其他时候使用ps -aux即可ps命令显示的信息选项

列名 全称 意义(通俗解释) USER User 该进程属于哪个用户(谁运行的)。 PID Process ID 进程 ID。这是每个进程的唯一身份证号,结束进程( kill)时要用到它。%CPU CPU Usage 进程占用的 CPU 百分比。 %MEM Memory Usage 进程占用的物理内存百分比。 VSZ Virtual Size 虚拟内存大小(KB),包含进程可以访问的所有内存,包括置换出去的。 RSS Resident Set Size 实际占用的物理内存大小(KB)。 TTY Terminal Type 进程在哪个终端运行。 ?表示后台运行(与终端无关)。STAT Status 进程状态(非常关键,见下表)。 START Start Time 进程启动的具体时间。 TIME CPU Time 进程自启动以来实际占用 CPU 的总时间。 COMMAND Command 启动该进程的完整命令行。 详解进程状态(STAT)
R (Running):正在运行,或者在运行队列中等待。
S (Interruptible Sleep):可中断休眠。它在等某个事件发生(比如等用户输入)。
D (Uninterruptible Sleep):不可中断休眠。通常在等硬盘 I/O,此时
kill -9也杀不掉它。T (Stopped):已停止(可能被手动暂停了)。
Z (Zombie):僵尸进程。进程已结束,但父进程还没回收它的“尸体”(信息)。
<:高优先级进程。
N:低优先级进程。
+:位于前台进程组。

1.3.3 终止进程kill和killall
介绍:若是一个进程执行到一半需要停止或消耗过大资源时,可以考虑停止该进程,使用kill命令即可。
基本语法
kill [选项] 进程号,通过进程号杀死进程killall 进程名称,杀死所有该名称的进程,支持通配符
常用选项
-9: 强制杀死进程-15: 默认选项,请求进程正常关闭-1: 挂起信号,通常用于让进程重新加载配置
案例
踢掉某个非法登录用户

ps -aux | grep sshd, 找到管理远程连接的该进程,其中ethan [priv]即为目标进程,终止该进程,该远程连接以及其子进程也会断掉终止远程登录服务sshd:
root 7776 1 0 17:44 ? 00:00:00 /usr/sbin/sshd -D,终止该进程即可,重启该服务命令为/bin/systemctl start sshd.service终止多个gedit:
killall gedit强制杀掉一个终端

ps -aux | grep bash,找到所有终端,pts/ 的即为目标,可以在要杀掉的终端内输入tty命令,获取终端号,再根据其对应的进程号杀死即可,需要-9强制杀掉
1.3.4 查看进程树pstree
基本语法:
pstree [选项],可以更加直观的来查看进程的信息常用选项
-p: 显示进程PID

-u: 显示进程所属用户

1.3.5 服务管理
介绍:服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如(mysqld,sshd,防火墙等),因此也称为守护进程
service管理指令
- 基本语法:
service 服务名 [start | stop | restart | reload | status] - 注意:在CentOS7.0后,很多服务不再使用 service,而是 systemctl
- service指令管理的服务在
/etc/init.d查看
- 基本语法:
服务管理
chkconfig指令(check configuration)
- 介绍
- 管理开机自启的指令
- 通过chkconfig指令可以给服务的各个运行级别设置自启动/关闭,即设置该服务在某个运行级别下是自启动还是关闭
- 该指令管理的服务可以通过
/etc/init.d查看 - CentOS 7.0后,很多服务使用 systemctl 管理
- chkconfig 基本语法
- chkconfig --list [| grep xxx] 查看服务
- chkconfig 服务名 --list 查看特定服务
- chkconfig --level 5 服务名 on / off
- 介绍
systemctl管理指令分类 操作 指令 说明 服务控制 启动 systemctl start <服务名>立即开启服务 停止 systemctl stop <服务名>立即关闭服务 重启 systemctl restart <服务名>重启服务(先关后开) 状态 systemctl status <服务名>🔍 查看运行详情、PID及最近日志 开机自启 启用 systemctl enable <服务名>设置为开机后自动运行 禁用 systemctl disable <服务名>取消开机自动运行 检查 systemctl is-enabled <服务名>查询该服务是否已设为自启 系统查询 运行中 systemctl list-unit-files列出磁盘上安装的服务 失败项 systemctl --failed⚠️ 快速找出启动失败的服务 注意:systemctl管理的指令在
/usr/lib/systemd/system查看打开或者关闭防火墙的指定端口
firewall指令:- 打开端口:
firewall-cmd --permanent --add-port=端口号/协议(可以通过netstat -anp指令查看端口所使用的协议)。如果不加 --permanent 参数,立即生效;加了该参数需要使用firewall-cmd --reload指令重载才能生效。 - 关闭端口:
firewall-cmd --permanent --remove-port=端口号/协议 - 重新载入,才能生效:
firewall-cmd --reload - 查询端口是否开放:
firewall-cmd --query-port=端口/协议
- 打开端口:
1.3.6 动态监控进程(top指令)
top指令和ps指令很相似,都用来显示正在执行的进程,top与ps最大的不同之处在于top可以实时更新正在运行的进程。top 指令是 Linux 下最常用的实时系统监控工具。它就像是 Windows 的“任务管理器”,能让你看到 CPU 占用、内存消耗以及哪些进程正在“拖慢”你的系统。
输入 top 后,界面会不断刷新(默认 3 秒一次)。我们可以把输出内容拆解为上下两个部分:
一、 上半部分:系统状态概览(System Summary)
这一部分提供了系统整体的健康报告。
- 第一行:任务队列信息
up 20 days:系统已经运行了多久。load average: 0.05, 0.03, 0.05:核心指标! 分别代表 1分钟、5分钟、15分钟内的系统平均负载。如果数值超过了 CPU 核心数,说明系统很忙。
- 第二行:进程统计 (Tasks)
- 告诉你总共有多少进程,多少在运行(running),多少在睡眠(sleeping),多少已停止(stopped)或成了僵尸进程(zombie)。
- 第三行:CPU 占用情况 (%Cpu(s))
us(user):用户进程占用 CPU 百分比。sy(system):内核进程占用 CPU 百分比。id(idle):空闲率。这个值越高,系统越轻松。wa(iowait):等待磁盘 I/O 的时间。如果这个值很高,说明磁盘太慢了。
- 第四/五行:内存与交换区 (Mem / Swap)
- 显示总内存、已用、空闲以及缓存(buff/cache)占用。

二、 下半部分:进程详情列表
每一行代表一个进程,重要列名如下:
- PID:进程 ID。
- USER:进程所有者。
- PR / NI:优先级。越小优先级越高。
- VIRT / RES / SHR:虚拟内存、常驻内存(实际占用的物理内存)、共享内存。看内存占用主要看 RES。
- S:进程状态(S=睡眠,R=运行,Z=僵尸)。
- %CPU / %MEM:该进程占用的 CPU 和内存百分比。
- COMMAND:进程的名字或启动命令。

三、 top 的交互式快捷键
在 top 运行期间,你可以直接按键盘来改变视图:
| 快捷键 | 作用 |
|---|---|
M | 按内存占用大小排序。 |
P | 按CPU占用大小排序(默认)。 |
N | 按PID排序 |
T | 按运行时间排序。 |
u | 输入用户名,查看指定用户的进程 |
1 (数字) | 展开/收起多核 CPU。查看每个核心的负载情况。 |
c | 显示完整的命令行参数(Command path)。 |
k | 杀掉进程(会提示输入 PID)。 |
q | 退出 top。 |
四、 常用命令参数
top -d 1:每隔 1 秒刷新一次(默认是 3 秒)。top -p 1234:只监控 PID 为 1234 的特定进程。top -u root:只显示特定用户的进程。
当你发现服务器变慢时,标准流程是:
- 看
load average确认系统是否过载。 - 看
%Cpu(s)的id是否太低,或者wa是否太高(磁盘瓶颈)。 - 按
P或M找出占用资源最高的“罪魁祸首”进程。
1.3.7 监控网络状态
- 查看系统网络情况
- 基本语法:
netstat [选项] - 常用选项:
- -a(all):列出所有的连接
- -n(numeric):以数字形式显示地址和端口号
- -p(programs):显示占用该链接的进程PID和进程名称
- 基本语法:
- 检测主机连接
- 基本语法:
ping 对方ip地址
- 基本语法:
1.4 RPM与YUM
1.4.1 RPM包的管理
介绍:rpm是用于互联网下载包的打包及安装工具,它生成具有.rpm扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe。Linux的分发版本都有采用(suse,redhat,centos 等等),可以算是公认的行业标准了。
rpm包的简单查询指令
- 查询已安装的rpm列表:
rpm -qa | grep xx
- 查询已安装的rpm列表:
rpm包名基本格式
firefox-60.2.2-1.el7.centos.x86_64
组成部分 具体内容 含义说明 软件名称 firefox程序的名称。 主版本号 60.2.2软件官方发布的版本号。通常遵循 主版本.次版本.修订号。发布次序 1这是该版本软件的第几次编译打包(由发行版维护者确定)。 操作系统 el7表示适用于 Enterprise Linux 7(即 RHEL 7 或 CentOS 7)。 发行商 centos标明这个包是由 CentOS 社区编译制作的。 硬件架构 x86_64关键信息! 表示适用于 64 位 Intel/AMD 处理器。 关于硬件架构(x86_64)
这一部分决定了你的机器能不能装这个包:
- x86_64 / amd64:标准的 64 位系统。
- i686 / i386:旧式的 32 位系统。
- noarch:表示“无架构依赖”。通常是脚本(如 Python、Shell)或文档,可以在任何 CPU 上运行。
- arm64 / aarch64:适用于手机、树莓派或苹果 M 系列芯片服务器。
关于操作系统标识 (el7)
el7代表 Red Hat Enterprise Linux 7 兼容系列。如果你在 CentOS 8 上看到它,通常会显示
el8。注意:通常高版本的系统可以兼容低版本的包(如 el7 的包可能在 el8 运行),但反过来往往会报错。
rpm包的其它查询指令
操作 命令 说明 安装 rpm -ivh <包名>.rpmi安装,v显示过程,h显示进度条卸载 rpm -e <包名>e即 erase查询是否安装 rpm -q <包名>查询某个特定的包 查询所有已装 rpm -qaa即 all,常配合grep使用查询软件包信息 rpm -qi 软件包名i即 information,列出已安装软件包的详细信息查看文件所属 rpm -qf /bin/ls看看这个文件是哪个安装包生成的
1.4.2 YUM
介绍:Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
yum基本指令
操作 命令 说明 安装 yum install <名>自动下载并安装及其依赖 卸载 yum remove <名>删除软件包 更新 yum update更新系统中所有可升级的包 列出可用包 yum list查看仓库里有哪些软件 搜索 yum search <关键字>忘记全名时很有用 清理缓存 yum clean all当配置了新仓库但不生效时必做
1.5 配置 Java 开发环境
1.5.1 下载JDK并配置环境变量
准备工作
我们将压缩包放在/opt/jdk目录下,解压的文件放在
/local/local/下,新建文件夹。下载JDK
可以从官网下载好
.tar.gz包,使用xftp上传;也可以使用wget下载压缩包。wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
解压到指定目录
tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz -C /usr/local/java、
配置环境变量
编辑全局配置文件:
vi /etc/profile在文件末尾添加以下内容
# JAVA_HOME 指向你刚才解压的目录 export JAVA_HOME=/usr/local/java/jdk11 # 将 Java 的 bin 目录添加到系统搜索路径中 export PATH=$JAVA_HOME/bin:$PATH注意:在更改PATH变量的值时,最后需要将原有的PATH值添加上,类似于引用。
让配置立即生效
source /etc/profile检查配置是否成功
java -versionjavac -version
1.5.2 下载并配置tomcat
- 推荐自己去官网下载tomcat所需版本,wget下载太慢
- 同JDK下载流程一样,把tomcat解压到
/usr/local/tomcat/目录下 - 检查tomcat使用的端口是否开放:
firewall-cmd --query-port=8080/tcp,如未开放开放即可,记得firewall-cmd --reload,如果用的是云服务器(阿里云/腾讯云),记得还要在云控制台的安全组里放行 8080 端口。 - 启动服务:
/usr/local/tomcat/tomcat9/bin/startup.sh - 验证是否成功:查看端口
netstat -anp | grep 8080或者查看进程ps -ef | grep tomcat,打开浏览器访问一下
1.5.3 下载配置MySQL
手动安装 MySQL 是最能锻炼 Linux 基本功的任务之一。我们将按照 “下载源 -> 安装 -> 启动 -> 安全配置” 的标准流程进行。
由于 CentOS 7 默认的仓库里只有 MariaDB(MySQL 的一个分支),我们需要先告诉系统去哪里找正统的 MySQL。
第一步:添加 MySQL 官方 YUM 源
我们通过安装一个特定的 .rpm 文件来自动配置 YUM 仓库。
下载仓库设置文件(以 MySQL 8.0 为例):
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm安装这个文件:
rpm -ivh mysql80-community-release-el7-3.noarch.rpm安装完后,你可以去
/etc/yum.repos.d/目录下看看,会多出几个mysql-community开头的文件。
第二步:使用 YUM 安装 MySQL
现在系统已经知道去哪找 MySQL 了,直接安装服务端:
yum install mysql-community-server -y注意:如果安装过程中提示
GPG key retrieval failed,这是因为 GPG 密钥过期了。解决方法是在命令后加上--nogpgcheck,即:yum install mysql-community-server -y --nogpgcheck
第三步:启动服务并获取初始密码
启动 MySQL 服务:
systemctl start mysqld设置开机自启(非常重要,防止服务器重启后数据库没起):
systemctl enable mysqld获取临时密码:
MySQL 启动后会在日志中生成一个复杂的临时密码。
grep 'temporary password' /var/log/mysqld.log记下这串密码,一会儿登录要用。
第四步:登录并修改“强密码”
使用临时密码登录:
mysql -u root -p # 然后粘贴刚才记下的临时密码(输入时屏幕不会显示字符)修改 root 密码:
由于 MySQL 8.0 默认有密码强度策略,你的新密码必须包含:大写字母、小写字母、数字和特殊字符,且长度不少于 8 位。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'JavaDev@2026!';
第五步:开启远程连接(为了用 Navicat 等工具)
默认情况下,root 用户只能在 Linux 本机登录。如果你想在自己的 Windows 电脑上连接:
创建远程访问用户(或者修改现有的 root):
-- 创建一个可以从任何 IP 登录的 root CREATE USER 'root'@'%' IDENTIFIED BY 'JavaDev@2026!'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;退出 MySQL:输入
exit;。开放 3306 防火墙端口:
firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload
💡 核心目录总结(排错必看)
| 项目 | 路径 | 用途 |
|---|---|---|
| 配置文件 | /etc/my.cnf | 修改端口、字符集、内存设置 |
| 数据目录 | /var/lib/mysql | 最重要! 所有的数据库表文件都在这 |
| 错误日志 | /var/log/mysqld.log | 数据库起不来时,第一时间看这里 |
🚀 验证环节
现在,尝试在你的 Windows 电脑上打开 Navicat 或 DBeaver,输入服务器 IP、端口 3306 和刚才设定的新密码。
1.5.4 下载配置Nginx
Nginx 通常作为“门面”,负责处理 HTTPS、静态资源和请求转发。
根据你的环境(CentOS 7),我们依然采用官方源的手动安装方式,这样最稳定。
第一步:添加 Nginx 官方源
CentOS 默认仓库的 Nginx 版本通常比较旧,建议使用官方 Repo。
安装实用工具:
yum install -y yum-utils创建配置文件:
执行
vi /etc/yum.repos.d/nginx.repo,粘贴以下内容:[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
第二步:安装与启动
执行安装:
yum install -y nginx启动并设置开机自启:
systemctl start nginx systemctl enable nginx放行防火墙:
Nginx 默认使用 80 端口。
firewall-cmd --permanent --add-service=http firewall-cmd --reload此时在浏览器输入你的服务器 IP,看到 "Welcome to nginx!" 页面就说明安装成功了。
第三步:配置反向代理(对接 Tomcat)
这是后端开发最核心的配置。我们要实现:访问 http://IP,实际上是 Nginx 去找 http://localhost:8080(Tomcat)。
找到配置文件:
/etc/nginx/conf.d/default.conf修改 server 块(建议先备份):
Nginx
server { listen 80; server_name localhost; location / { proxy_pass http://localhost:8080; # 转发给 Tomcat proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }检查语法并重启:
Bash
nginx -t # 如果显示 syntax is ok,说明配置没写错 systemctl restart nginx
第四步:核心目录说明
| 路径 | 用途 |
|---|---|
/etc/nginx/nginx.conf | 主配置文件,通常不需要动 |
/etc/nginx/conf.d/ | 子配置目录,每个项目建议建一个 .conf 文件 |
/usr/share/nginx/html/ | 静态资源目录,存放 HTML、Vue 打包后的文件 |
/var/log/nginx/ | 日志目录,access.log 看访问量,error.log 排查报错 |
💡 后端实战小贴士
- 解决 403 Forbidden:如果你在 Nginx 里放了图片但访问不了,通常是 SELinux 拦截了。临时关闭命令:
setenforce 0。 - 动静分离:
- 将
.jsp或/api请求转发给 Tomcat。 - 将
.jpg、.css、.js直接由 Nginx 处理,速度会提升数倍。
- 将
🚀 避坑指南:80 端口占用
如果 Nginx 启动失败,报错 bind() to 0.0.0.0:80 failed (98: Address already in use):
- 执行
netstat -tunlp | grep 80查看是谁占了 80 端口。 - 如果是之前为了测试把 Tomcat 改成了 80 端口,记得改回 8080,让 Nginx 守住 80 这个大门。
1.6 Ubuntu
1.6.1 APT
APT 是 Ubuntu 的软件包管理器,类似于CentOS的yum。
APT基本指令
分类 指令 说明 备注 更新与升级 sudo apt update更新软件源。读取源列表,同步最新的软件包信息。 安装或升级前必做 sudo apt upgrade升级已安装的软件。将系统所有包更新到最新版本。 不会删除已安装的包 sudo apt full-upgrade全系统升级。升级的同时会根据依赖关系删除旧包。 升级内核或大版本时使用 安装与删除 sudo apt install <包名>安装软件包。自动处理并安装相关依赖。 sudo apt remove <包名>卸载软件包。保留配置文件。 sudo apt purge <包名>彻底卸载。删除软件包及其所有配置文件。 推荐想清空环境时使用 sudo apt install ./<文件名>.deb安装本地 .deb 文件。并自动补全缺失依赖。 替代旧的 dpkg -i搜索与查询 apt search <关键词>搜索软件包。在仓库中查找包含关键词的包。 不需要 sudo apt show <包名>显示详情。查看包的版本、大小、依赖、描述等。 不需要 sudo apt list --installed列出已安装。查看当前系统中所有已安装的软件。 apt list --upgradeable列出可升级。查看哪些软件有新版本。 清理与维护 sudo apt autoremove自动清理。删除不再需要的孤立依赖包。 卸载软件后建议运行 sudo apt clean清理缓存。删除 /var/cache/apt/archives下的安装包。节省磁盘空间 sudo apt edit-sources编辑源列表。直接打开 /etc/apt/sources.list。
注意:apt更适合命令行交互使用,apt-get等适合shell脚本使用
- 更新Ubuntu软件下载地址
- 备份
cp /etc/apt/sources.list /etc/apt/sources.list.backup - 寻找镜像源
- 修改
/etc/apt/sources.list文件,将镜像源替换掉 - 更新源:
sudo apt-get update
- 备份
1.6.2 远程登录
- SSH
- SSH为Secure Shell的缩写,为建立在应用层和传输层基础上的安全协议。
- SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,几乎所有的 Unix/Linux 平台都可运行SSH
- 使用SSH服务,需要安装相应的服务器和客户端。如果A机器想被B机器远程控制,那么A机器要装SSH服务器,B机器要装SSH客户端。
- Ubuntu默认没有安装SSHD服务,需要手动安装
- 安装SSH和启用服务
- 安装:
sudo apt-get install openssh-server,会将服务端和客户端都安装上 - 启用服务:
systemctl start sshd
- 安装:
- Linux主机登录到其他Linux主机
- 本机需要安装并启用SSH服务
- 命令:
ssh 用户名@ip地址
1.7 日志管理
1.7.1 日志介绍和实例
基本介绍

系统日志文件的保存位置在
/var/log/
系统常用日志
日志文件路径 主要用途 核心价值 /var/log/messages系统核心日志 记录系统启动、外设插入、内核通知等全局信息。排查硬件或底层服务报错的首选。 /var/log/secure安全与认证日志 记录所有 SSH 登录、密码修改、sudo 执行记录。被黑或登录失败看这里。 /var/log/mysqld.logMySQL 运行日志 记录数据库启动、崩溃、初始临时密码及各种 SQL 错误。 /var/log/cron定时任务日志 检查 crontab计划任务是否按时执行,是否有执行报错。/var/log/maillog邮件系统日志 记录 postfix、sendmail 等邮件服务的发送和接收状态。 /var/log/boot.log系统启动日志 记录系统开机自检、服务自启动的具体过程。 /var/log/dmesg内核缓冲日志 记录硬件驱动初始化信息。输入 dmesg命令可直接查看。/var/log/lastlog最后登录日志 记录系统中所有用户最后一次登录的时间(需用 lastlog命令查看)。
1.7.2 日志管理服务 rsyslogd
配置文件:
/etc/rsyslog.conf,编辑文件时的格式是 : *.* ,第一个*代表日志类型,第二个*代表日志级别日志类型分为:

日志级别分为:

由日志服务 rsyslogd 记录的日志文件,格式包含以下4列:
- 事件产生的时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息

自定义日志服务
- 在
/etc/rsyslog.conf后面仿照前面格式添加即可,自定义记录什么类型、什么级别的日志,自定义写入到哪个文件
- 在
1.7.3 日志轮替
基本介绍:日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围后,就会进行删除。大白话说就是,旧的日志文件存不下来,建一个新的日志文件,并且旧的日志文件到了一定条件(如超过一定时间)会被删除。
日志轮替全局配置文件:
/etc/logrotate.conf,也可以把某个日志文件的轮替规则,写到/etc/logrotate.d目录,单独配置的轮替规则优先级更高
日志轮替配置文件参数说明

把自己的日志加入日志轮替
可以在全局配置文件中加入自己配置文件的策略,但不推荐,日志文件多了以后维护困难
在
/etc/logrotate.d目录中添加自己配置文件的规则【推荐】
1.7.4 查看内存日志
内存日志是写在内存中的,重启系统会清空,用来记录当前系统内核和各服务信息。
常用指令
需求 命令 查看所有日志 journalctl实时滚动查看 journalctl -f查看本次开机后的日志 journalctl -b查看特定服务的日志 journalctl -u mysqld按时间过滤 journalctl --since "2026-03-02 12:00:00"查看内核日志 journalctl -k
1.8 安装配置docker
1.8.1 docker本体
第一步:卸载旧版本
如果系统之前安装过旧版本的 Docker(可能叫 docker 或 docker-engine),请先清理干净:
Bash
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine第二步:安装基础依赖与软件源
为了确保安装过程顺利,我们需要安装 yum-utils 并添加 Docker 的官方仓库。
安装必要工具:
Bash
sudo yum install -y yum-utils添加 Docker 软件源(推荐使用阿里云镜像源,速度更快):
Bash
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
第三步:安装 Docker 引擎
这里我们安装的是社区版(Docker CE)。
Bash
sudo yum install -y docker-ce docker-ce-cli containerd.io第四步:启动并设置开机自启
安装完成后,Docker 默认是不运行的。
Bash
sudo systemctl start docker # 启动 Docker
sudo systemctl enable docker # 设置开机自启验证安装:输入 docker version,看到 Client 和 Server 信息说明安装成功。
第五步:核心配置——镜像加速器 (重要 🚀)
在国内直接拉取镜像(如 docker pull mysql)通常会非常慢甚至超时。我们需要配置国内镜像站(如阿里云、网易等)。
创建配置目录:
Bash
sudo mkdir -p /etc/docker编写配置文件:
执行
vi /etc/docker/daemon.json,粘贴以下内容(这里以阿里云加速器为例):JSON
{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://noohub.net" ] }重启服务生效:
Bash
sudo systemctl daemon-reload sudo systemctl restart docker
💡 Docker 常用“保命”指令
| 指令 | 说明 | 备注 |
|---|---|---|
docker pull <镜像名> | 从仓库下载镜像 | 比如 docker pull nginx |
docker ps | 查看当前运行中的容器 | 相当于 Linux 的 ps -ef |
docker ps -a | 查看所有容器(含已停止的) | |
docker images | 查看本地已有的镜像 | |
docker logs -f <容器ID> | 实时滚动查看容器日志 | 后端查报错神器 |
docker exec -it <ID> /bin/bash | 进入容器内部进行操作 | 就像 SSH 进另一台机器 |
🚀 避坑指南:权限问题
如果你不想每次执行 docker 命令都加 sudo,可以将你的当前用户加入 docker 组:
Bash
sudo usermod -aG docker $USER执行后需要重新连接 SSH(或者重新登录)才会生效。
1.8.2 Docker使用
使用流程: pull 安装镜像 + run 创建容器 即可使用
images有关操作 C: docker pull image(镜像名) R: docker images D: docker rmi image(镜像名)
容器相关操作 // 创建容器时,如果没有找到对应镜像,docker会主动拉取镜像 C: docker run [
-p宿主机端口:容器端口 端口映射] [-d分离模式,在后台启动容器,不占用当前docker窗口] [-- name自己取的名字] [-it进入容器控制台交互] [-v宿主机目录:容器目录 文件(挂载卷)映射,将docker的数据保存到宿主机里,有利于数据的持久化保存] [-e配置容器默认环境变量,比如为MongoDB启动时默认设置账户密码] [
--network 网络创建容器时加入该网络] [
-- rm当容器停止时就删除掉容器 一般用于测试是否可行,为正式使用做准备] [-- restart [always 容器停止即立即重启,处理意外情况] [unless-stopped 除非手动停止容器,否则容器停止 立即重启]] image(镜像名称) R: docker ps [-a 查看当前所有的包括没有正在运行的容器] docker inspect 容器 查看创建的容器信息,直接粘给AI分析即可 docker logs [-f flow滚动查看日志] 容器 U: docker start 容器 docker stop 容器
D: docker rm [-f 删除正在运行的容器,需要强制删除]
docker exec -it 容器 bash
挂载卷相关操作
- docker volume create:创建数据卷
- docker volume ls:查看所有数据卷
- docker volume rm:删除指定数据卷
- docker volume inspect:查看某个数据卷的详情
- docker volume prune:清除所有未使用的数据卷

1.8.3 制作MySQL容器
docker run -d \
--name mysql-server \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
-v /opt/mysql/data:/var/lib/mysql \ # 数据
-v /opt/mysql/conf:/etc/mysql/conf.d \ # 配置文件
-v /opt/mysql/init:/docker-entrypoint-initdb.d \ # 初始化脚本
mysql:8.01.8.4 自定义docker镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
构建一个Java镜像的步骤
- 准备一个Linux运行环境
- 安装JDK并配置环境变量
- 拷贝Jar包
- 编写运行脚本
镜像结构:添加安装包、依赖、配置等,每次操作都形成新的一层

Dockerfile
Dockerfile 是一个文本文件,包含了构建镜像所需的全部指令,通过执行
docker build命令,dokcer就会根据该文件,生成镜像,后续通过docker save保存镜像文件,将其传递给其他用户。其他用户使用docker load命令即可获得该镜像。常见指令:

案例:写Dockerfile文件,构建Java应用镜像


1.8.5 docker网络
默认情况下,所有容器都是以桥接方式连接到Docker的一个虚拟网桥上(安装自带),所有的容器和该虚拟网桥处于同一网段内,可以互相通信,那么容器间通信就可以走内网IP,安全型、性能都会提高,成本也会降低。但是有个问题,如果使用容器的内网IP进行通信的话,容器一旦关闭重启,那么其所对应的IP就需要更改,很麻烦,这时就需要搭建一个docker网络。
docker网络常用命令

在同一个docker网络中,通信时,可以使用主机名,docker DNS服务会将主机名替换为对应IP
1.8.6 Docker Compose
Docker Compose 通过一个单独的 docker-compose.yml 模版文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。
YAML 基础语法规范
在编写 .yml 文件时,缩进就是一切:
- 缩进:必须使用空格,不能用 Tab。通常缩进 2 个空格。
- 冒号:所有键值对的冒号后必须加一个空格(如
image: mysql)。 - 列表:使用短横线
-开头,横线后也要加空格。 - 大小写:YAML 对大小写敏感。
- Docker Compose 核心配置指令
| 指令 | 作用 | 备注 |
|---|---|---|
version | 指定 Compose 文件的版本 | 建议使用 "3.8" 或更高版本。 |
services | 定义你要启动的容器集合 | 每一个子项代表一个容器。 |
image | 指定容器使用的镜像 | 如 mysql:8.0。 |
container_name | 手动指定容器名称 | 方便在 docker ps 中查看。 |
ports | 宿主机与容器的端口映射 | 格式为 宿主机端口:容器端口。 |
volumes | 数据卷挂载(持久化数据) | 格式为 宿主机路径:容器路径。 |
environment | 设置环境变量 | 比如 MySQL 的密码配置。 |
networks | 定义容器所属的网络 | 方便容器间通过名称互相访问。 |
depends_on | 定义容器启动顺序 | 比如 App 必须等 MySQL 启动后再启动。 |
- 实战模版:Nginx + App + MySQL 三合一
你可以直接将以下内容保存为 docker-compose.yml:
version: "3.8"
services:
# 1. 数据库服务
db:
image: mysql:8.0
container_name: mysql-prod
restart: always
environment:
MYSQL_ROOT_PASSWORD: "你的密码"
MYSQL_DATABASE: "你的库名"
volumes:
- /opt/mysql/data:/var/lib/mysql
# 注意:为了安全,这里不配置 ports 映射到公网
networks:
- app-tier
# 2. 后端应用服务
myapp:
image: myapp:1.0
/*
可以使用以下构建镜像的方式实现
build:
context: . # Dockerfile 位置
dockerfile: Dockerfile # Dockerfile名称
*/
container_name: myapp-prod
restart: always
depends_on:
- db
environment:
# 重点:利用容器名解析 IP,端口写 3306 即可
- DB_HOST=db
- DB_PORT=3306
networks:
- app-tier
# 3. Nginx 代理服务
nginx:
image: nginx:latest
container_name: nginx-prod
restart: always
ports:
- "80:80" # 唯一对外开放的端口
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- myapp
networks:
- app-tier
# 定义网络,实现内网互通
networks:
app-tier:
driver: bridge
name: weiqiang- 常用管理命令
在 docker-compose.yml 所在的目录下执行:
- 启动所有服务:
docker compose up -d(-d表示后台运行)。 - 停止并删除容器:
docker compose down(这会清理掉网络,但挂载的数据卷不会掉)。 - 查看运行状态:
docker compose ps。 - 查看某个服务的日志:
docker compose logs -f myapp。
💡 避坑笔记
- 相对路径:在
volumes中,可以使用./表示当前目录。 - 环境变量保护:敏感的密码建议写在同目录下的
.env文件里,然后在.yml中引用,防止密码泄露到 Git 仓库。 - 内网 DNS:在
myapp中连接数据库时,Host 必须写services下定义的名称(如上面的db),而不是容器名。